package exercises.leetcode;

import java.util.ArrayList;
import java.util.List;

/**
 * <a href="https://leetcode-cn.com/problems/two-out-of-three/">
 * 5894. 至少在两个数组中出现的值</a>
 *
 * <p><span color="#87CEEB">描述:</span>
 * 给你三个整数数组 nums1、nums2 和 nums3 ，请你构造并返回一个 不同 数组，且由 至少 在 两个 数组中出现的所有值组成。数组中的元素可以按 任意 顺序排列。
 *
 * @author or2
 * @date 2021年10月10日 时间: 12:43
 */
public class No5894 {
    public List<Integer> twoOutOfThree(int[] nums1, int[] nums2, int[] nums3) {
        byte[] freq = new byte[101];
        for (int i : nums1) freq[i] |= 0b1;
        for (int i : nums2) freq[i] |= 0b10;
        for (int i : nums3) freq[i] |= 0b100;

        var res = new ArrayList<Integer>();
        for (int i = 0, freqLength = freq.length; i < freqLength; i++)
            if (freq[i] > 4 || freq[i] == 3)
                res.add(i);

        return res;
    }
}
